package 集合.双列集合;

import java.util.TreeMap;
import java.util.TreeSet;
import java.util.function.BiConsumer;

public class treemap {
    /*
    需求：
    字符串“asdgbvbjkasalnaanl”请统计每个字符出现的次数，按照以下格式输出
    a（5） b（4）c（3）。。。
    统计思想：利用map集合进行统计
    如果题目中没有要求对结果进行排序，默认使用Hashmap
    如果题目中要求对结果进行排序，默认使用Treemap
    键：表示统计的内容
    值：表示次数
     */
    public static void main(String[] args) {


//    1.定义字符串
        String s = "asdgbvbjkasalnaanl";

//        如果题目中要求对结果进行排序，默认使用Treemap
//        2.创建集合
        TreeMap<Character, Integer> tm = new TreeMap<>();
//    遍历字符串得到每一个字符
        for (int i = 0; i < s.length(); i++) {
//            在此拿着c到集合中判断是否存在
            char c = s.charAt(i);
//            System.out.println(c);
            if (tm.containsKey(c)) {
//                如果存在，得到键对应的键值，并将次数加一，再次覆盖原值
                Integer value = tm.get(c);
                value++;
                tm.put(c, value);
            } else {
//                如果不存在，在集合中添加键值对对象
                tm.put(c, 1);
            }
        }
//        System.out.println(tm);
//        遍历集合
        StringBuilder sb = new StringBuilder();
        tm.forEach(new BiConsumer<Character, Integer>() {
            @Override
            public void accept(Character character, Integer integer) {
                sb.append(character).append("(").append(integer).append(")").append(" ");
            }
        });
        System.out.println(sb);
//        a（5） b（4）c（3）
/*        forEach简化方法：可以省略 new BiConsumer<Character, Integer>() {
            @Override
            public void accept
        可以省略：数据类型(Character character, Integer integer)中的Character，Integer
                参数只有一个，小括号可以省略;方法体只有一行，大括号可以省略，return 可以省略，分号可以省略
        简化版：
        tm.forEach((character, integer)->sb.append(character).append("(").append(integer).append(")").append(" "));
 */
    }
}


